package com.hollis公众号.json序列化;

import java.io.IOException;
import java.io.Serializable;
import java.util.StringJoiner;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;

/**
 * 布尔类型： 基本类型自动生成的getter和setter方法，名称都是isXXX()和setXXX()形式的。
 * 包装类型自动生成的getter和setter方法，名称都是getXXX()和setXXX()形式的。
 *
 * Serializable Result With Gson :{"isSuccess":true} Serializable Result With
 * jackson :{"success":true,"hollis":"hollischuang"}
 *
 * 在fastjson和jackson的结果中，原来类中的isSuccess字段被序列化成success，并且其中还包含hollis值。
 * 而Gson中只有isSuccess字段。
 * 我们可以得出结论：fastjson和jackson在把对象序列化成json字符串的时候，是通过反射遍历出该类中的所有getter方法
 * ，得到getHollis和isSuccess，然后根据JavaBeans规则，他会认为这是两个属性hollis和success的值。直接序列化成json:
 * {“hollis”:”hollischuang”,”success”:true}
 * 但是Gson并不是这么做的，他是通过反射遍历该类中的所有属性，并把其值序列化成json: {“isSuccess”:true}
 *
 */
public class BooleanMainTest {

	public static void main(String[] args) throws IOException {
		// 定一个Model3类型
		Model3 model3 = new Model3();
		model3.setSuccess(true);

		// 使用Gson(2.8.5)序列化model3成字符串并输出
		Gson gson = new Gson();
		System.out.println("Serializable Result With Gson :" + gson.toJson(model3));

		// 使用jackson(2.9.7)序列化model3成字符串并输出
		ObjectMapper om = new ObjectMapper();
		System.out.println("Serializable Result With jackson :" + om.writeValueAsString(model3));
	}
}

class Model3 implements Serializable {

	private static final long serialVersionUID = 1836697963736227954L;
	private boolean isSuccess;

	public boolean isSuccess() {
		return isSuccess;
	}

	public void setSuccess(boolean success) {
		isSuccess = success;
	}

	public String getHollis() {
		return "hollischuang";
	}

	@Override
	public String toString() {
		return new StringJoiner(", ", Model3.class.getSimpleName() + "[", "]").add("isSuccess=" + isSuccess).toString();
	}
}